package com.ll.enum_;

/**
 * @author 刘龙
 * @version 1.0
 */
public class Enumeration02 {
    public static void main(String[] args) {
        Season2 autumn = Season2.AUTUMN;

        // 返回当前对象的名字 AUTUMN
        System.out.println(autumn.name());

        // 没有重写toString()返回 对象的名字
        // AUTUMN
        System.out.println(autumn);

        // 返回当前对象的位置号,默认从0开始 3
        System.out.println(autumn.ordinal());
        System.out.println("123");
        // 返回定义的所有对象
        Season2[] values = Season2.values();
        for (Season2 value : values) {
            System.out.println(value.name());
        }

        // 根据字符串寻找指定的枚举对象,要求字符串必须为已有的常量名
        Season2 summer = Season2.valueOf("SUMMER");
        System.out.println(summer);


    }
}

/**
 * 使用enum关键字来实现枚举
 */
enum Season2 {

    /**
     * 定义了4个对象
     * 如果使用了enum关键字来实现枚举
     * 1.使用关键字enum 替代 class
     * 2.常量名(实参列表)
     * 3.如果有多个常量(对象). 使用.间隔开
     * 4.如果使用enum实现枚举,要求将定义常量对象,写在前面
     */
    SPRING("春天", "温暖"),WINTER("冬天", "寒冷"),SUMMER("夏天", "炎热"),AUTUMN("秋天", "凉爽");
    private String name;
    private String desc;

    /**
     * 1.将构造器私有化
     * 2.去掉setXxx方法,防止属性被修改
     * 3.在Season内部,直接创建固定的对象
     * 4.优化,加入final修饰符
     * @param name
     * @param desc
     */
    private Season2(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

}